package com.ingesoft.client;

import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.ListGridEditEvent;
import com.smartgwt.client.types.TitleOrientation;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.ButtonItem;
import com.smartgwt.client.widgets.form.fields.TextAreaItem;
import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.events.CellDoubleClickEvent;
import com.smartgwt.client.widgets.grid.events.CellDoubleClickHandler;
import com.smartgwt.client.widgets.grid.events.CellSavedEvent;
import com.smartgwt.client.widgets.grid.events.CellSavedHandler;
import com.smartgwt.client.widgets.layout.HStack;
import com.smartgwt.client.widgets.layout.VStack;
import com.smartgwt.client.widgets.tab.Tab;

public class TabMaterial extends Tab {
	
	private ViewController contorller;
	
	private ListGrid tableMateriales;
	private ListGridField fieldMateriales;
	
	private Window winMaterial;
	
	private TextAreaItem txtMaterial;
	
	
	private ButtonItem btnEditarMaterial;
	
	private ButtonItem btnCreaFila;
	
	public TabMaterial(ViewController controller)
	{
		this.contorller=controller;
		
		
		
		fieldMateriales=new ListGridField("nombreMaterial", "Nombre del Material", 635);
		fieldMateriales.setAlign(Alignment.CENTER);
		
		tableMateriales=new ListGrid();
		tableMateriales.setFields(fieldMateriales);
		tableMateriales.setFixedRecordHeights(false);
		tableMateriales.setWrapCells(true);
		tableMateriales.setWidth(650);
		tableMateriales.setHeight(450);
		tableMateriales.setTop(100);
		tableMateriales.setEditEvent(ListGridEditEvent.NONE);
		tableMateriales.setTooltip("Desde aqui puede adicionar y modificar un material.");
		
		btnCreaFila=new ButtonItem("Agregar");
		
		
		DynamicForm form=new DynamicForm();
		form.setDefaultWidth(850);
		form.setFields(btnCreaFila);
		form.setLayoutAlign(Alignment.CENTER);
		
		VStack ordenForma=new VStack();
		ordenForma.addMember(form);
		ordenForma.setWidth(70);
		ordenForma.setDefaultLayoutAlign(Alignment.CENTER);
		ordenForma.setLayoutLeftMargin(5);
		ordenForma.setLayoutRightMargin(5);
		ordenForma.setLayoutTopMargin(1);
		
		VStack orden=new VStack(5);
		
		orden.setDefaultWidth(900);
		orden.setDefaultHeight(600);
		orden.addMember(tableMateriales);
		orden.addMember(ordenForma);
		orden.setDefaultLayoutAlign(Alignment.CENTER);
		orden.setLayoutRightMargin(100);
		orden.setLayoutTopMargin(20);
		orden.setLayoutLeftMargin(100);
		
		setTitle("Material del Curso");
		setPane(orden);
		abrirVentana();
		crearFila();
	}
	
	public void crearFila()
	{
		
		btnCreaFila.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				// TODO Auto-generated method stub
				
				tableMateriales.startEditingNew();
				
			}
		});
		
	}

	public void crearMaterial()
	{
		tableMateriales.addCellSavedHandler(new CellSavedHandler() {
			
			@Override
			public void onCellSaved(CellSavedEvent event) {
				// TODO Se invoca el metodo para crear un nuevo material
				
			}
		});
		
	}
	
	public void abrirVentana()
	{
		tableMateriales.addCellDoubleClickHandler(new CellDoubleClickHandler() {
			
			@Override
			public void onCellDoubleClick(CellDoubleClickEvent event) {
				// TODO Auto-generated method stub
				int filaNum=event.getRowNum();
				mostrarVentanaMaterial(filaNum);
				
			}
		});
	}
	
	public void mostrarVentanaMaterial(int filaNum)
	{
		
		winMaterial=new Window();
		winMaterial.setWidth(540);
		winMaterial.setHeight(300);
		winMaterial.setTitle("Material");
		winMaterial.centerInPage();
		winMaterial.setShowMinimizeButton(false);
		winMaterial.setIsModal(true);

		txtMaterial=new TextAreaItem();
		txtMaterial.setTitle("Contenido:");
		txtMaterial.setTitleOrientation(TitleOrientation.TOP);
		txtMaterial.setWidth(498);
		txtMaterial.setHeight(200);
		
		btnEditarMaterial=new ButtonItem("Editar");
		String material=tableMateriales.getSelectedRecord().getAttributeAsString("nombreMaterial");
		txtMaterial.setValue(material);
		
		DynamicForm formTxt=new DynamicForm();
		formTxt.setDefaultWidth(500);
		formTxt.setFields(txtMaterial);
		
		DynamicForm formEditar=new DynamicForm();
		formEditar.setDefaultWidth(70);
		formEditar.setFields(btnEditarMaterial);
		
		HStack ordenFormas=new HStack();
		ordenFormas.addMember(formEditar);
		ordenFormas.setDefaultLayoutAlign(Alignment.CENTER);
		ordenFormas.setLayoutLeftMargin(200);
		ordenFormas.setLayoutRightMargin(5);
		ordenFormas.setLayoutTopMargin(4);
		
		VStack ordenVentana=new VStack(5);
		ordenVentana.addMember(formTxt);
		ordenVentana.addMember(ordenFormas);
		ordenVentana.setDefaultWidth(490);
		ordenVentana.setDefaultLayoutAlign(Alignment.CENTER);
		ordenVentana.setLayoutLeftMargin(5);
		ordenVentana.setLayoutRightMargin(5);
		ordenVentana.setLayoutTopMargin(5);
		
		winMaterial.addItem(ordenVentana);
		winMaterial.show();
		
		editarMaterial(filaNum);
	}
	
	public void editarMaterial(final int filaNum)
	{
		btnEditarMaterial.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				// TODO Invoca al metodo de editar material.
				// Obtengo el valor selecciona para tener referencia del material viejo
				// con el fin de obtener el id 
				
				
				String material=txtMaterial.getDisplayValue();
				
				tableMateriales.setEditValue(filaNum, "nombreMaterial", material);
				tableMateriales.startEditing();
			}
		});
	}
	
}
